﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
//int add(int a, int b)
//{
//	return a + b;
//}
//typedef int (*p)(int, int);
//typedef int(*point)[5];
//
//int main()
//{
//	p p1 = add;
//	int arr[5] = { 1,2,3,4,5 };
//	printf("%d", p1(1, 2));
//	point arr1 = &arr;
//	int* p2 = (int*)(arr1 + 1);
//	p2--;
//	printf("%d",*p2);
//	return 0;
//}
//#include <stdio.h>
//int main()
//{
//    int m, n;
//    scanf("%d %d", &m, &n);
//    int isPrime = 1;
//    int x, i;
//    int cnt = 0;
//    int sum = 0;
//    for (x = m; x <= n; x++)
//    {
//        int isPrime = 1;
//         for (i=2;i<x;i++){
//             if (x%i==0){
//                 isPrime = 0;
//                 break;
//             }
//         }
//        if (isPrime == 1&&x!=1) {
//            cnt++;
//            sum += x;
//        }
//    }
//    printf("%d %d", cnt, sum);
//    return 0;
//}

// struct ListNode {
//      int val;
//      struct ListNode *next;
//  };
//
////1 2 4  // 1 3 4
//#include<stdio.h>
//#include<stdlib.h>
// struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {
//     //创造一个新的链表（双指针大法）
//     struct ListNode* phead, * ptail;
//     phead = ptail = NULL;
//     //先考虑两者都不是空链表的情况
//     while (list1 && list2)
//     {
//         //当一开始链表为空
//         if (phead == NULL)
//         {
//             if (list1->val <= list2->val)
//             {
//                 phead = list1;
//                 ptail = phead->next;
//                 list1 = list1->next;
//             }
//             else
//             {
//                 phead = list2;
//                 ptail = phead->next;
//                 list2 = list2->next;
//             }
//         }
//         else
//         {
//             if (list1->val <= list2->val)
//             {
//                 ptail = list1;
//                 ptail = ptail->next;
//                 list1 = list1->next;
//             }
//             else
//             {
//                 ptail = list2;
//                 ptail = ptail->next;
//                 list2 = list2->next;
//             }
//         }
//
//     }
//     //此时至少有一个链表指向NULL
//     if (list1 == NULL)
//     {
//         ptail = list2;
//     }
//     else
//     {
//         ptail = list1;
//     }
//     return phead;
// }
// void Listprint(struct ListNode* p)
// {
//     while (p != NULL)
//     {
//         printf("%d->", p->val);
//         p = p->next;
//     }
//     printf("NULL\n");
// }
// void CList(struct ListNode** p, int x)
// {
//     *p = (struct ListNode*)malloc(sizeof(struct ListNode));
//     if (p == NULL)
//     {
//         perror("malloc failed");
//         exit(1);
//     }
//     (*p)->val = x;
// }
//int main()
//{
//    struct ListNode* str1;
//    CList(&str1, 1);
//    struct ListNode* str3;
//    CList(&str3, 2);
//    struct ListNode* str4;
//    CList(&str4, 4);
//    str1->next = str3;
//    str3->next = str4;
//    str4->next = NULL;
//    struct ListNode* str2;
//    CList(&str2, 1);
//    struct ListNode* str5;
//    CList(&str5, 3);
//    struct ListNode* str6;
//    CList(&str6, 4);
//    str2->next = str5;
//    str5->next = str6;
//    str6->next = NULL;
//    struct ListNode* phead = mergeTwoLists(str1, str2);
//    Listprint(phead);
//}
//#include<stdio.h>
//#include<ctype.h>
//#include<stdlib.h>
//typedef int(*p)(int, int);
//void calc(p p1)//函数地址作为参数传递给另外一个函数
//{
//	int ret = 0;
//	int x, y;
//	printf("请输入操作数:\n");
//	scanf("%d %d", &x, &y);
//	ret = p1(x, y);
//	printf("ret=%d", ret);
//
//}
//int add(int x, int y)
//{
//	return x + y;
//}
//void my_swap(void* p1, void* p2,int sz)
//{
//	for (int i = 0; i < sz; i++)
//	{
//		char temp = *((char*)p1 + i);
//		*((char*)p1 + i) = *((char*)p2 + i);
//		*((char*)p2 + i) = temp;
//	}
//}
//int int_cmp(const void* p1, const  void* p2)
//{
//	return *(int*)p1 - *(int*)p2;
//}
//void test01()
//{
//	int arr[] = { 1, 3, 2, 5, 4, 8, 6, 9, 7, 0 };
//	int size = sizeof(arr) / sizeof(arr[0]);
//	qsort(arr, size, sizeof(int), int_cmp);
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//
//
//}
//void test02()
//{
//	char str[] = "Hello World";
//	for (int i = 0; str[i]!= '\0'; i++)
//	{
//		if (islower(str[i]))
//		{
//			str[i] = toupper(str[i]);
//		}
//		putchar(str[i]);
//	}
//}
//void test03()
//{
//	const char* str1 = "abcdef";
//	const char* str2 = "bbb";
//	if (strlen(str2) - strlen(str1) > 0)//注意strlen返回的是无符号整数
//	{
//		printf("str2>str1\n");
//	}
//	else
//	{
//		printf("srt1>str2\n");
//	}
//}
//几个字符串函数的使用
//这个代码没跑通
//void test04()
//{
//	//char str1[100] = "xwxhih";//数组名是首元素地址常量
//	//char* str2 = "xsaxhw";
//	//strcpy(str1, str2);
//	//printf("%s", str1);
//	//strcat从其字符串的\0位置开始追加
//	char str1[100] = "xwxhih";
//	char str2[] = "xsaxhw";
//	/*printf("%s", strcat(str1, str2));*/
//	//printf("%d", strcmp(str1, str2));
//	char* p = strncpy(str1, str2, 20);
//	printf("%s", p);
//}
//void test04()
//{
//	char str1[100] = "xwxhih";
//	const char* str2 = "xsaxhw";
//	strncpy(str1, str2, sizeof(str1) - 1);
//	str1[sizeof(str1) - 1] = '\0';  // 手动加终止符
//	char* p = str1;
//	printf("%s", p);
//}
//void test05()
//{
	//char str1[20];
	//char str2[20];
	//strcpy(str1, "To be ");
	//strcpy(str2, "or not to be");
	//strncat(str1, str2, 6);
	////我发现只要用一个指针去接受再用这个指针去访问的话就会报错
	//printf("%s\n", str1);
	//return 0;
	//char str[] = "This is a simple string";
	//char* pch;
	//pch = strstr(str, "simple");
	//strncpy(pch, "sample", 6);
	//printf("%s\n", str);
	/*char* p = "dxwd";
	printf("%s", p);*/
//}
//void test06()
//{
//	/*int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	memcpy(arr2, arr1, 20);
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", arr2[i]);
//	}*/
//	char str[] = "hello world";
//	memset(str, 'x', 6);
//	printf(str);
//}
//int* test07()
//{
//	int* arr = (int*)calloc(10, sizeof(int));
//	for (int i = 0; i < 10; i++)
//	{
//		arr[i] = i;
//	}
//	return arr;
//}
//柔性数组
//typedef struct st_type
//{
//	int i;
//	int arr[];
//}type_a;
//void test08()
//{
//	type_a* p = (type_a*)malloc(sizeof(type_a) + sizeof(int) * 100);
//	p->i = 100;
//	for (int i = 0; i < p->i; i++)
//	{
//		p->arr[i] = i;
//	}
//	free(p);
//	p = NULL;
//
//
//}
//int main()
//{
//	//printf("%d", islower(97));
//	//calc(add);
//	//test01();
//	//test02();
//	//test03();
//	//test04();
//	//test05();
//	/*int * arr=test07();
//	for (int i = 0; i < 10; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	free(arr);
//	arr = NULL;*/
//	//test08();
//	int a, b;
//	printf("请输入两个数: ");
//	scanf("%d %d", &a, &b);
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	int a = 10000;
//	FILE* pf = fopen("test.txt", "wb");
//	fwrite(&a, 4, 1, pf);//⼆进制的形式写到⽂件中
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
//#include<stdio.h>
//int main()
//{
//	//创造文件指针
//	FILE* p = NULL;
//	//打开文件
//	p = fopen("my_file.txt", "r");
//	//判断文件有没有被正确的打开
//	if (p == NULL)
//	{
//		perror("file open failed");
//		return 1;
//	}
//	char str[100];
//	fgets(str,8,p);
//	printf("%s", str);
//	fclose(p);
//	p = NULL;
//	return 0;
//}
//#include<stdio.h>
//#include<string.h>
//typedef struct node {
//	char str[100];
//	int age;
//	int size;
//
//}node;
//int main()
//{
//	//创造文件指针
//	FILE* p = NULL;
//	//打开文件
//	p = fopen("my_file.txt", "r");
//	//判断文件有没有被正确的打开
//	if (p == NULL)
//	{
//		perror("file open failed");
//		return 1;
//	}
//	node n;
//	fscanf(p,"%s %d %d ", n.str, &n.age, &n.size);
//	printf("%s %d %d", n.str, n.age, n.size);
//	fclose(p);
//	p = NULL;
//	return 0;
//}
#include<stdio.h>
int main()
{
	//创造文件指针
	FILE* p = NULL;
	//打开文件
	p = fopen("my_file.txt", "rb");
	//判断文件有没有被正确的打开
	if (p == NULL)
	{
		perror("file open failed");
		return 1;
	}
	int arr[10] = {0};
	fread(arr, sizeof(int), 5, p);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);;
	}
	fclose(p);
	p = NULL;
	return 0;
}
